﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebAppPlanProduccion.Code;
using Web.Framework;
using System.IO;
using PlanProd.Contracts;
using WebAppPlanProduccion.Code.Security;
using PlanProd.Contracts.Validation;
using System.Text;

namespace WebAppPlanProduccion.App
{
    public partial class PedidoComercialCreate : BasePage
    {     
        protected void Page_Load(object sender, EventArgs e)
        {
            HasPermissionToSeeMe(PlanProdSecurity.PEDIDOCOMERCIAL_VER);
            if (!this.IsPostBack)
            {
                UIHelper.LoadTemporadas(this.cboTemporada);
                UIHelper.LoadDestinos(this.cboDestino);
            }
        }

        protected override void ApplySecurity()
        {
            this.filePedidoComercial.Visible = HasPermissionFor(PlanProdSecurity.PEDIDOCOMERCIAL_DETALLE_IMPORTAR);
            this.lnkSave.Visible = HasPermissionFor(PlanProdSecurity.PEDIDOCOMERCIAL_CREAR);
        }

        protected void lnkSave_Click(object sender, EventArgs e)
        {
            string filePath = string.Empty;
            try
            {
                int temporadaId = Convert.ToInt32(this.cboTemporada.SelectedValue);
                int destinoId = Convert.ToInt32(this.cboDestino.SelectedValue);
                PedidoComercial pedidoComercial = new PedidoComercial();
                pedidoComercial.TemporadaId = temporadaId;
                pedidoComercial.DestinoId = destinoId;
                pedidoComercial.Nombre = txtNombre.Text;
                pedidoComercial.EmpresaId = BaseMasterPage.CompanyId;

                List<string> parseErrors = new List<string>();
                if (this.filePedidoComercial.HasFile)
                {
                    string tmpPath = HttpContext.Current.Server.MapPath("/Tmp");
                    string fileName = Guid.NewGuid().ToString();
                    filePath = Path.Combine(tmpPath, fileName);
                    this.filePedidoComercial.SaveAs(filePath);

                    // Cargar objetos de producto color
                    var detallesDelPedidoComercial = ExcelHelper.GetPedidoComercialDetalleFromExcel(filePath, pedidoComercial, parseErrors);

                    List<ProductoValidation> productosAValidar = new List<ProductoValidation>();
                    foreach (var detallePedidoComercial in detallesDelPedidoComercial)
                    {
                        productosAValidar.Add(new ProductoValidation()
                        {
                            Producto = detallePedidoComercial.ProductoIdExterno,
                            ColorId = detallePedidoComercial.ColorId
                        });
                    }
                    List<ProductoValidation> productosValidados = WebServiceHelper.ValidarProductos(productosAValidar);

                    if (parseErrors.Count == 0 && productosValidados.Count == 0)
                    {
                        pedidoComercial.Detalle.AddRange(detallesDelPedidoComercial);
                        pedidoComercial = WebServiceHelper.SavePedidoComercial(pedidoComercial);
                        Response.Redirect(string.Format("/App/PedidoComercialEdit.aspx?Id={0}", pedidoComercial.Id), true);
                    }
                    else
                    {
                        StringBuilder builder = new StringBuilder();
                        string separador = string.Empty;
                        foreach (string parseError in parseErrors)
                        {
                            builder.Append(separador);
                            builder.AppendLine(parseError);                           
                            separador = "<br />";
                        }

                        if(productosValidados.Count > 0)
                        {
                            builder.AppendLine("Los siguientes productos no existen en la base de datos:");
                            foreach (ProductoValidation productoInexistente in productosValidados)
                            {
                                builder.Append(separador);
                                builder.AppendLine(string.Format("Producto: {0}, Color: {1}", productoInexistente.Producto, productoInexistente.ColorId));                                
                                separador = "<br />";
                            }
                        }

                        masterPage.ShowMessage(builder.ToString(), WebMessageType.Error);
                    }                   
                }
               
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
            finally
            {
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }
            }
        }

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                Response.Redirect("/App/PedidoComercialList.aspx", true);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }
    }
}